A list of things I learned from each of the sections of Advanced R:
I - Foundations:
- I notice that I use the switch function a ton now, where previously I used if-else nests.
- I use condition-handling to pass errors back to the user of my Shiny apps now.
- I now know what an Environment is and where and why R would look for something. (This helps both in function-writing and debugging!)
- I write a heck of a lot of functions (this ties into II: Functional Programming, of course)
II - Functional Programming
- I map the crap out of everything now (if I didn’t before, it’s way worse now!), and have learned to use functions in a ton of different ways.
- I now understand what a function factory is, and what to do if a function somehow returns me a function instead (as opposed to panicking about it!)
- I now know about a series of modifiers to help adjust function behaviours (memoise, quietly, safely, possibly) - although I use tryCatch as much as I do these.
III - OOP
- I wrote a package for S3 usage! It’s cool to minimize the user interface for multiple platforms.
- I’m now comfortable USING an R6 package - I don’t know that I’d reach for an R6 system now but the whole “function$method” thing doesn’t scare me anymore
- S4? wot that
V Techniques
- Debugging: I now know how to use browser, and love it! Also debug()!
- Performance measure/improve: still don’t do a ton of this, even though I’m a shiny dev.
- I … still don’t know C++ or Rcpp. 🤷
LS0tDQp0aXRsZTogIlRJTEZBUiAtIFRoaW5ncyBJIExlYXJuZWQgRnJvbSBBZHZhbmNlZCBSIg0KZGF0ZTogMjAyMC0wOS0yMg0KYXV0aG9yOiBUYW4gSG8NCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdGhlbWU6IGRhcmtseQ0KLS0tDQoNCmBgYHtyIGluY2x1ZGUgPSBGQUxTRX0NCg0KIyBnZm9udHM6OnNldHVwX2ZvbnQoImZpcmEtc2FucyIsInd3dyIpDQpnZm9udHM6OnVzZV9mb250KCJmaXJhLXNhbnMiLCJ3d3cvY3NzL2ZpcmEtc2Fucy5jc3MiKQ0KDQpgYGANCg0KQSBsaXN0IG9mIHRoaW5ncyBJIGxlYXJuZWQgZnJvbSBlYWNoIG9mIHRoZSBzZWN0aW9ucyBvZiBBZHZhbmNlZCBSOg0KDQojIyMgSSAtIEZvdW5kYXRpb25zOiANCg0KLSBJIG5vdGljZSB0aGF0IEkgdXNlIHRoZSBzd2l0Y2ggZnVuY3Rpb24gYSB0b24gbm93LCB3aGVyZSBwcmV2aW91c2x5IEkgdXNlZCBpZi1lbHNlIG5lc3RzLg0KLSBJIHVzZSBjb25kaXRpb24taGFuZGxpbmcgdG8gcGFzcyBlcnJvcnMgYmFjayB0byB0aGUgdXNlciBvZiBteSBTaGlueSBhcHBzIG5vdy4NCi0gSSBub3cga25vdyB3aGF0IGFuIEVudmlyb25tZW50IGlzIGFuZCB3aGVyZSBhbmQgd2h5IFIgd291bGQgbG9vayBmb3Igc29tZXRoaW5nLiAoVGhpcyBoZWxwcyBib3RoIGluIGZ1bmN0aW9uLXdyaXRpbmcgYW5kIGRlYnVnZ2luZyEpDQotIEkgd3JpdGUgYSBoZWNrIG9mIGEgbG90IG9mIGZ1bmN0aW9ucyAodGhpcyB0aWVzIGludG8gSUk6IEZ1bmN0aW9uYWwgUHJvZ3JhbW1pbmcsIG9mIGNvdXJzZSkNCg0KIyMjIElJIC0gRnVuY3Rpb25hbCBQcm9ncmFtbWluZw0KDQotIEkgbWFwIHRoZSBjcmFwIG91dCBvZiBldmVyeXRoaW5nIG5vdyAoaWYgSSBkaWRuJ3QgYmVmb3JlLCBpdCdzIHdheSB3b3JzZSBub3chKSwgYW5kIGhhdmUgbGVhcm5lZCB0byB1c2UgZnVuY3Rpb25zIGluIGEgdG9uIG9mIGRpZmZlcmVudCB3YXlzLg0KLSBJIG5vdyB1bmRlcnN0YW5kIHdoYXQgYSBmdW5jdGlvbiBmYWN0b3J5IGlzLCBhbmQgd2hhdCB0byBkbyBpZiBhIGZ1bmN0aW9uIHNvbWVob3cgcmV0dXJucyBtZSBhIGZ1bmN0aW9uIGluc3RlYWQgKGFzIG9wcG9zZWQgdG8gcGFuaWNraW5nIGFib3V0IGl0ISkNCi0gSSBub3cga25vdyBhYm91dCBhIHNlcmllcyBvZiBtb2RpZmllcnMgdG8gaGVscCBhZGp1c3QgZnVuY3Rpb24gYmVoYXZpb3VycyAobWVtb2lzZSwgcXVpZXRseSwgc2FmZWx5LCBwb3NzaWJseSkgLSBhbHRob3VnaCBJIHVzZSB0cnlDYXRjaCBhcyBtdWNoIGFzIEkgZG8gdGhlc2UuDQoNCiMjIyBJSUkgLSBPT1ANCg0KLSBJIHdyb3RlIGEgcGFja2FnZSBmb3IgUzMgdXNhZ2UhIEl0J3MgY29vbCB0byBtaW5pbWl6ZSB0aGUgdXNlciBpbnRlcmZhY2UgZm9yIG11bHRpcGxlIHBsYXRmb3Jtcy4gDQotIEknbSBub3cgY29tZm9ydGFibGUgVVNJTkcgYW4gUjYgcGFja2FnZSAtIEkgZG9uJ3Qga25vdyB0aGF0IEknZCByZWFjaCBmb3IgYW4gUjYgc3lzdGVtIG5vdyBidXQgdGhlIHdob2xlICJmdW5jdGlvbiRtZXRob2QiIHRoaW5nIGRvZXNuJ3Qgc2NhcmUgbWUgYW55bW9yZQ0KLSBTND8gd290IHRoYXQNCg0KIyMjIElWIE1ldGFwcm9ncmFtbWluZw0KDQotIEkgbm93IGtub3cgaG93IHRvIHBhc3MgZXhwcmVzc2lvbnMgdG8gdGlkeXZlcnNlIHN0dWZmIQ0KLSBJIG5vdyBrbm93IHdoZXJlIHRvIGxvb2sgaW4gdGhlIE1ldGFwcm9ncmFtbWluZyBhbmQgaG93IHRvIGludGVwcmV0IHRoZSB0ZXh0Lg0KDQojIyMgViBUZWNobmlxdWVzDQoNCi0gRGVidWdnaW5nOiBJIG5vdyBrbm93IGhvdyB0byB1c2UgYnJvd3NlciwgYW5kIGxvdmUgaXQhIEFsc28gZGVidWcoKSENCi0gUGVyZm9ybWFuY2UgbWVhc3VyZS9pbXByb3ZlOiBzdGlsbCBkb24ndCBkbyBhIHRvbiBvZiB0aGlzLCBldmVuIHRob3VnaCBJJ20gYSBzaGlueSBkZXYuIA0KLSBJIC4uLiBzdGlsbCBkb24ndCBrbm93IEMrKyBvciBSY3BwLiBgciBlbW86OmppKCdzaHJ1ZycpYA0K